package com.example.demo.day0225;
/**
 * HashSet
 * 底层数据结构是哈希表。             
 * LinkedHashSet
 * 底层数据结构由链表和哈希表组成。
 * 由链表保证元素有序。
 * 由哈希表保证元素唯一。
 *TreeSet
 * 底层数据结构是红黑树。(是一种自平衡的二叉树)
 *根据比较的返回值是否是0来决定保证元素唯一性
 * 两种排序方式
 * 自然排序(元素具备比较性)
 * 让元素所属的类实现Comparable接口
 * 比较器排序(集合具备比较性)
 * 让集合接收一个Comparator的实现类对象
 */

import java.util.Collections;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class StudyTreeSet {
    public static void main(String[] args) {
        Set<Integer> ts = new TreeSet<Integer>();
        ts.add(5);
        ts.add(2);
        ts.add(4);
        ts.add(3);
//        Collections.reverse(ts);
        System.out.println(ts);//TreeSet集合是自然排序
//        ts.remove(2);//从TreeSet集合中移除元素2
//        ts.contains(3);//判断元素3是否在TreeSet集合内
//        ts.clear();
        Iterator<Integer> t=ts.iterator();//用迭代器遍历
        while (t.hasNext()){
            System.out.println(t.next());


        /*    其他Exception，受检查异常。可以理解为错误，必须要开发者解决以后才能编译通过，解决的方法有两种，
            1：throw到上层，
            2，try-catch处理。

            RunTimeException：运行时异常，又称不受检查异常，不受检查！
            不受检查！！不受检查！！！重要的事情说三遍，因为不受检查，所以在代码中可能会有RunTimeException时Java编译检查时不会告诉你有这个异常，但是在实际运行代码时则会暴露出来，比如经典的1/0，空指针等。如果不处理也会被Java自己处理。*/
          //  throw new java.lang.Exception ();
        }
        for(Integer i:ts){//foreach遍历
            System.out.println(i);
            throw new RuntimeException();
        }
    }
}

